package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.common.R;

import com.itheima.entity.Category;
import com.itheima.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author ASUS
 * @date 2022/10/24 10:29 周一
 */
@RestController
@Slf4j
@RequestMapping("/category")
public class CategoryController {

    @Autowired
    private CategoryService service;

    /**
     * 分类 分页条件查询
     *
     * @param
     * @return
     */
    @GetMapping("/page")
    public R<Page> getForPage(int page, int pageSize) {

        log.info("page = {},pageSize = {}", page, pageSize);
//page1 是主体数据
        Page page1 = new Page(page, pageSize);
// 条件限制
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByDesc(Category::getName);
        queryWrapper.orderByAsc(Category::getSort);
       // 分页查询
        service.page(page1, queryWrapper);

        return R.success(page1);

    }

    /**
     * 添加
     *
     * @param category
     * @return
     */
    @PostMapping
    public R<String> save(@RequestBody Category category) {
        log.info(category.toString());
        service.save(category);
        return R.success("添加分类成功");
    }

    /**
     * 删除
     *  菜品分类删除 : 菜品分类涉及到 所包含的多种菜品 及 套餐 如果有联系
     *  菜品和套餐存在就不能删除菜品分类 定义方法进行判断
     * @param id
     * @return
     */

    @DeleteMapping
    public R<String> delete(Long id) {

        service.remove(id);

        return R.success("删除分类成功");
    }

    /**
     * 根据 id查询 数据回显
     */

    @GetMapping("/{id}")
    public R<Category> getById(@PathVariable Long id) {
        log.info("根据id 菜品信息...");
        Category byId = service.getById(id);
        if (byId != null) {
            return R.success(byId);
        }
        return R.error("没有查询到对应菜品信息");
    }

    /**
     * 修改
     */
    @PutMapping
    public R<String> update(@RequestBody Category category) {
        log.info("菜品信息:{}", category.toString());

        LambdaUpdateWrapper<Category> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(Category::getId, category.getId());
        service.update(category, updateWrapper);

        return R.success("修改成功");

    }

    /**
     * 条件分类查询
     *  返回的是菜品分类的集合
     * 并对查询的结果按照sort排序字段进行升序排序，如果sort相同，再按照修改时间倒序排序。
     */
    @GetMapping("/list")
    public R<List<Category>> list(Category category) {

        LambdaQueryWrapper<Category> categoryLambdaQueryWrapper = new LambdaQueryWrapper<>();

// 动态判断,类型匹配的条件
        categoryLambdaQueryWrapper.eq(category.getType()!=null,Category::getType,category.getType());
// 两个排列 条件
        categoryLambdaQueryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime);
// 查询到的是提个菜品分类集合
        List<Category> list = service.list(categoryLambdaQueryWrapper);
// 查询成功,返回集合
        return R.success(list);

    }

}
